From 2090dbb27d4dd3afc76bff4631e5b506c5ee0009 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 30 Apr 2020 15:32:38 +0100 Subject: [PATCH] tests: Remove gtk_dialog_run() Either use the "response" signal for dialogs that are already modal, or use an explicit nested loop for tests that rely on the response id being available in sequence. --- tests/print-editor.c | 58 +++++++++++++++++++++++++-------------- tests/testappchooser.c | 37 ++++++++++++++++++------- tests/testcombochange.c | 35 ++++++++++++++++------- tests/testdialog.c | 61 ++++++++++++++++++----------------------- tests/testfilechooser.c | 12 +++++--- tests/testwindowsize.c | 21 +++++++++----- 6 files changed, 138 insertions(+), 86 deletions(-) diff --git a/tests/print-editor.c b/tests/print-editor.c index 7b8ca15e15..37ea8cf7ca 100644 --- a/tests/print-editor.c +++ b/tests/print-editor.c @@ -495,13 +495,26 @@ activate_preview (GSimpleAction *action, print_or_preview (action, GTK_PRINT_OPERATION_ACTION_PREVIEW); } +static void +on_save_response (GtkWidget *dialog, + int response) +{ + if (response == GTK_RESPONSE_OK) + { + GFile *save_filename = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + save_file (save_filename); + g_object_unref (save_filename); + } + + gtk_window_destroy (GTK_WINDOW (dialog)); +} + static void activate_save_as (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkWidget *dialog; - gint response; dialog = gtk_file_chooser_dialog_new ("Select file", GTK_WINDOW (main_window), @@ -510,16 +523,12 @@ activate_save_as (GSimpleAction *action, "_Save", GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); - response = gtk_dialog_run (GTK_DIALOG (dialog)); - - if (response == GTK_RESPONSE_OK) - { - GFile *save_filename = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); - save_file (save_filename); - g_object_unref (save_filename); - } + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + gtk_widget_show (dialog); - gtk_window_destroy (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", + G_CALLBACK (on_save_response), + NULL); } static void @@ -533,13 +542,26 @@ activate_save (GSimpleAction *action, save_file (filename); } +static void +on_open_response (GtkWidget *dialog, + int response) +{ + if (response == GTK_RESPONSE_OK) + { + GFile *open_filename = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + load_file (open_filename); + g_object_unref (open_filename); + } + + gtk_window_destroy (GTK_WINDOW (dialog)); +} + static void activate_open (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkWidget *dialog; - gint response; dialog = gtk_file_chooser_dialog_new ("Select file", GTK_WINDOW (main_window), @@ -548,16 +570,12 @@ activate_open (GSimpleAction *action, "_Open", GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); - response = gtk_dialog_run (GTK_DIALOG (dialog)); - - if (response == GTK_RESPONSE_OK) - { - GFile *open_filename = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); - load_file (open_filename); - g_object_unref (open_filename); - } + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + gtk_widget_show (dialog); - gtk_window_destroy (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", + G_CALLBACK (on_open_response), + NULL); } static void diff --git a/tests/testappchooser.c b/tests/testappchooser.c index 281f96e9bb..63ec9bfdee 100644 --- a/tests/testappchooser.c +++ b/tests/testappchooser.c @@ -125,12 +125,32 @@ display_dialog (void) gtk_widget_show (dialog); } +static void +on_open_response (GtkWidget *file_chooser, + int response) +{ + if (response == GTK_RESPONSE_ACCEPT) + { + char *path; + + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (file_chooser)); + path = g_file_get_path (file); + + gtk_button_set_label (GTK_BUTTON (file_l), path); + + g_free (path); + } + + gtk_window_destroy (GTK_WINDOW (file_chooser)); + + gtk_widget_set_sensitive (open, TRUE); +} + static void button_clicked (GtkButton *b, gpointer user_data) { GtkWidget *w; - gchar *path; w = gtk_file_chooser_dialog_new ("Select file", GTK_WINDOW (toplevel), @@ -139,16 +159,13 @@ button_clicked (GtkButton *b, "_Open", GTK_RESPONSE_ACCEPT, NULL); - gtk_dialog_run (GTK_DIALOG (w)); - file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (w)); - path = g_file_get_path (file); - gtk_button_set_label (GTK_BUTTON (file_l), path); - - gtk_window_destroy (GTK_WINDOW (w)); + gtk_window_set_modal (GTK_WINDOW (w), TRUE); - gtk_widget_set_sensitive (open, TRUE); + g_signal_connect (w, "response", + G_CALLBACK (on_open_response), + NULL); - g_free (path); + gtk_window_present (GTK_WINDOW (w)); } static void @@ -180,7 +197,7 @@ main (int argc, char **argv) w1, 0, 0, 1, 1); file_l = gtk_button_new (); - path = g_build_filename (g_get_current_dir (), "apple-red.png", NULL); + path = g_build_filename (GTK_SRCDIR, "apple-red.png", NULL); file = g_file_new_for_path (path); gtk_button_set_label (GTK_BUTTON (file_l), path); g_free (path); diff --git a/tests/testcombochange.c b/tests/testcombochange.c index 29cefc662a..a4a6ec9b56 100644 --- a/tests/testcombochange.c +++ b/tests/testcombochange.c @@ -191,7 +191,7 @@ int main (int argc, char **argv) { GtkWidget *content_area; - GtkWidget *dialog; + GtkWidget *window; GtkWidget *scrolled_window; GtkWidget *hbox; GtkWidget *button_vbox; @@ -206,13 +206,12 @@ main (int argc, char **argv) model = gtk_list_store_new (1, G_TYPE_STRING); contents = g_array_new (FALSE, FALSE, sizeof (char)); - - dialog = gtk_dialog_new_with_buttons ("GtkComboBox model changes", - NULL, 0, - "_Close", GTK_RESPONSE_CLOSE, - NULL); - content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); + window = gtk_window_new (); + gtk_window_set_title (GTK_WINDOW (window), "ComboBox Change"); + + content_area = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + gtk_window_set_child (GTK_WINDOW (window), content_area); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_box_append (GTK_BOX (content_area), hbox); @@ -243,7 +242,7 @@ main (int argc, char **argv) button_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8); gtk_box_append (GTK_BOX (hbox), button_vbox); - gtk_window_set_default_size (GTK_WINDOW (dialog), 500, 300); + gtk_window_set_default_size (GTK_WINDOW (window), 500, 300); button = gtk_button_new_with_label ("Insert"); gtk_box_append (GTK_BOX (button_vbox), button); @@ -261,8 +260,24 @@ main (int argc, char **argv) gtk_box_append (GTK_BOX (button_vbox), button); g_signal_connect (button, "clicked", G_CALLBACK (on_animate), NULL); - gtk_widget_show (dialog); - gtk_dialog_run (GTK_DIALOG (dialog)); + GtkWidget *close_button = gtk_button_new_with_mnemonic ("_Close"); + gtk_widget_set_hexpand (close_button, TRUE); + gtk_box_append (GTK_BOX (content_area), close_button); + + gtk_widget_show (window); + + GMainLoop *loop = g_main_loop_new (NULL, FALSE); + + g_signal_connect_swapped (close_button, "clicked", + G_CALLBACK (gtk_window_destroy), + window); + g_signal_connect_swapped (window, "destroy", + G_CALLBACK (g_main_loop_quit), + loop); + + g_main_loop_run (loop); + + g_main_loop_unref (loop); return 0; } diff --git a/tests/testdialog.c b/tests/testdialog.c index c78ec11336..75027b3c9b 100644 --- a/tests/testdialog.c +++ b/tests/testdialog.c @@ -16,8 +16,8 @@ show_message_dialog1 (GtkWindow *parent) gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "Unhandled error message: SSH program unexpectedly exited"); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -33,8 +33,8 @@ show_message_dialog1a (GtkWindow *parent) GTK_BUTTONS_OK, "The system network services are not compatible with this version.")); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -56,8 +56,8 @@ show_message_dialog2 (GtkWindow *parent) "Empty Wastebasket", GTK_RESPONSE_OK, NULL); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -66,9 +66,8 @@ show_color_chooser (GtkWindow *parent) GtkWidget *dialog; dialog = gtk_color_chooser_dialog_new ("Builtin", parent); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -81,8 +80,8 @@ show_color_chooser_generic (GtkWindow *parent) "transient-for", parent, NULL); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -119,9 +118,8 @@ show_dialog (GtkWindow *parent) NULL); add_content (dialog); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -135,9 +133,8 @@ show_dialog_with_header (GtkWindow *parent) NULL); add_content (dialog); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -152,9 +149,8 @@ show_dialog_with_buttons (GtkWindow *parent) NULL); add_content (dialog); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -169,9 +165,8 @@ show_dialog_with_header_buttons (GtkWindow *parent) NULL); add_content (dialog); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -183,9 +178,8 @@ show_dialog_with_header_buttons2 (GtkWindow *parent) builder = gtk_builder_new_from_file ("dialog.ui"); dialog = (GtkWidget *)gtk_builder_get_object (builder, "dialog"); g_object_unref (builder); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } typedef struct { @@ -231,9 +225,8 @@ show_dialog_from_template (GtkWindow *parent) NULL); add_content (dialog); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } static void @@ -252,9 +245,8 @@ show_dialog_flex_template (GtkWindow *parent) NULL); add_content (dialog); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } typedef struct { @@ -305,9 +297,8 @@ show_dialog_from_template_with_header (GtkWindow *parent) add_buttons (dialog); add_content (dialog); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_window_present (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_destroy), NULL); } int diff --git a/tests/testfilechooser.c b/tests/testfilechooser.c index 0cb5875ab6..71c0358af3 100644 --- a/tests/testfilechooser.c +++ b/tests/testfilechooser.c @@ -156,8 +156,10 @@ set_current_folder (GtkFileChooser *chooser, GTK_BUTTONS_CLOSE, "Could not set the folder to %s", name); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_widget_show (dialog); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_window_destroy), + NULL); } g_object_unref (file); } @@ -191,8 +193,10 @@ set_filename (GtkFileChooser *chooser, GTK_BUTTONS_CLOSE, "Could not select %s", name); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_window_destroy (GTK_WINDOW (dialog)); + gtk_widget_show (dialog); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_window_destroy), + NULL); } g_object_unref (file); } diff --git a/tests/testwindowsize.c b/tests/testwindowsize.c index 961843cc05..ae6b2fcaa5 100644 --- a/tests/testwindowsize.c +++ b/tests/testwindowsize.c @@ -65,10 +65,10 @@ show_dialog (void) gtk_widget_realize (dialog); g_signal_connect (gtk_native_get_surface (GTK_NATIVE (dialog)), "size-changed", G_CALLBACK (size_changed_cb), label); - - gtk_dialog_run (GTK_DIALOG (dialog)); - - gtk_window_destroy (GTK_WINDOW (dialog)); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_window_destroy), + NULL); + gtk_widget_show (dialog); } static void @@ -127,6 +127,16 @@ create_window (void) gtk_grid_attach (GTK_GRID (grid), button, 2, 4, 1, 1); gtk_widget_show (window); + + GMainLoop *loop = g_main_loop_new (NULL, FALSE); + + g_signal_connect_swapped (window, "destroy", + G_CALLBACK (g_main_loop_quit), + loop); + + g_main_loop_run (loop); + + g_main_loop_unref (loop); } int @@ -136,8 +146,5 @@ main (int argc, char *argv[]) create_window (); - while (TRUE) - g_main_context_iteration (NULL, TRUE); - return 0; } -- 2.30.2